package com.itheima.interface3; // 包声明，指定当前类所在的位置，com.itheima.interface3是包路径
//    -- 定义第二套实现类，实现接口：实现打印学生信息(男女人数)，实现打印平均分（去掉最高分和最低分）。
public class ClassDataInterImpl2 implements ClassDataInter{ // 定义一个公开的类ClassDataInterImpl2，实现ClassDataInter接口
    private Student[] students; // 成员变量：定义一个私有的Student类型数组，用于存储全班学生对象信息
    
    public ClassDataInterImpl2(Student[] students) { // 构造函数：用于创建ClassDataInterImpl2对象时初始化students数组
        this.students = students; // 使用this关键字区分成员变量和局部变量，将传入的students数组赋值给成员变量
    }
    
    @Override // 重写注解：表示下面的方法是重写接口中的抽象方法
    public void printAllStudentInfos() { // 实现接口中的printAllStudentInfos方法，用于打印所有学生信息并统计男女生人数
        System.out.println("学生信息如下："); // 打印提示信息
        int maleCount = 0; // 定义整型变量maleCount，用于统计男生人数，初始值为0
        
        for (int i = 0; i < students.length; i++) { // for循环遍历students数组中的每个学生对象
            Student s = students[i]; // 从数组中取出当前索引位置的学生对象
            System.out.println(s.getName() + " " + s.getSex() + " " + s.getScore()); // 打印学生的姓名、性别和分数
            
            if (s.getSex() == '男') { // 判断学生性别是否为男（字符比较）
                maleCount++; // 如果是男生，maleCount计数器加1
            }
        }
        
        System.out.println("男学生人数：" + maleCount); // 打印统计得到的男生人数
        System.out.println("女学生人数：" + (students.length - maleCount)); // 通过总人数减去男生人数得到女生人数并打印
    }

    // 实现打印平均分（去掉最高分和最低分）
    @Override // 重写注解：表示下面的方法是重写接口中的抽象方法
    public void printAverageScore() { // 实现接口中的printAverageScore方法，计算并打印去掉最高分和最低分后的平均分
        System.out.println("平均分如下："); // 打印提示信息
        
        Student s1 = students[0]; // 获取数组中的第一个学生对象
        double sum = s1.getScore(); // 初始化总分sum为第一个学生的分数
        double max = s1.getScore(); // 初始化最高分max为第一个学生的分数
        double min = s1.getScore(); // 初始化最低分min为第一个学生的分数
        
        for (int i = 1; i < students.length; i++) { // 从数组的第二个元素开始遍历（索引为1）
            Student s = students[i]; // 获取当前索引位置的学生对象
            sum += s.getScore(); // 将当前学生的分数累加到总分sum中

            if(s.getScore() > max) { // 判断当前学生的分数是否大于已知的最高分
                max = s.getScore(); // 如果是，更新最高分为当前学生的分数
            }

            if(s.getScore() < min) { // 判断当前学生的分数是否小于已知的最低分
                min = s.getScore(); // 如果是，更新最低分为当前学生的分数
            }
        }
        
        System.out.println("最高分：" + max); // 打印找到的最高分
        System.out.println("最低分：" + min); // 打印找到的最低分
        System.out.println("平均分：" + (sum - max - min) / (students.length - 2)); // 计算去掉最高分和最低分后的平均分并打印
        // 计算方式：(总分-最高分-最低分)/(总人数-2)
    }
} // 类定义结束
